/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.saber.certificacao.beansjsf.cadastro;

import br.com.saber.certificacao.beansjsf.interfacebean.BeanJSFInterface;
import br.com.saber.certificacao.beansjsf.semescopo.SelectItemManager;
import br.com.saber.certificacao.ejbs.stateless.interfaces.ObjetivoCertificacaoBeanLocal;
import br.com.saber.certificacao.modelos.ObjetivoCertificacao;
import br.com.saber.certificacao.modelos.Usuario;
import br.com.saber.certificacao.modelos.validadores.exceptions.generica.ValidacaoExcecao;
import br.com.saber.certificacao.observador.ControleObserver;
import br.com.saber.certificacao.utils.UtilMetodos;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.apache.commons.lang.StringUtils;

/**
 *
 * @author Guilherme
 */
@ManagedBean(name = "objetivoCertificacaoManager")
@ViewScoped
public class ObjetivoCertificacaoManager implements BeanJSFInterface, Observer {

    @EJB
    private ObjetivoCertificacaoBeanLocal objetivoCertificacaoBean;
    private ObjetivoCertificacao objetivoCertificacao;
    private List<ObjetivoCertificacao> modelObjetivos;
    @ManagedProperty("#{selectItemManager}")
    private SelectItemManager selectItemManager;
    public ObjetivoCertificacaoManager() {
    }

    //====================
    // Iniciadores
    //====================
    @Override
    @PreDestroy
    public void end() {
        Logger.getLogger(this.getClass().getName()).log(Level.FINEST, "ObjetivoCertificacaoManager.end() executado!");
    }

    @Override
    @PostConstruct
    public void init() {
        Usuario userAppl = new Usuario();
        userAppl.setId(ControleObserver.id);
        ControleObserver.addBeanObserver(userAppl, this);
        clean();
        Logger.getLogger(this.getClass().getName()).log(Level.FINEST, "ObjetivoCertificacaoManager.init() executado!");
    }
    //====================
    //Métodos de Negócio
    //====================

    public void cadastrarObjetivo() {
        try {
            this.objetivoCertificacaoBean.createObjetivoCertificacao(objetivoCertificacao);
            clean();
            Usuario userAppl = new Usuario();
            userAppl.setId(ControleObserver.id);
            ControleObserver.notificaObservers(userAppl, new String[]{ControleObserver.Eventos.CAD_OBJETIVO_CERTIFICACAO});
             UtilMetodos.messageFactoringFull(UtilMetodos.getResourceBundle("objetivoCadastradoOk", FacesContext.getCurrentInstance()),FacesMessage.SEVERITY_INFO, FacesContext.getCurrentInstance());
        } catch (ValidacaoExcecao v) {
            if (!StringUtils.isBlank(v.getAtributoName())) {
                UtilMetodos.messageFactoringFull(UtilMetodos.getResourceBundle(v.getMessage(), FacesContext.getCurrentInstance()), null, v.getAtributoName(), FacesMessage.SEVERITY_ERROR, FacesContext.getCurrentInstance());
            } else {
                UtilMetodos.messageFactoringFull(v.getMessage(), FacesMessage.SEVERITY_ERROR, FacesContext.getCurrentInstance());
            }
        }
    }

    public void clean() {
        this.objetivoCertificacao = new ObjetivoCertificacao();
    }

    @Override
    public void update(Observable o, Object arg) {
        String[] args = (String[]) arg;
        for (int i = 0; i < args.length; i++) {
            if (args[i].equals(ControleObserver.Eventos.CAD_OBJETIVO_CERTIFICACAO)) {
                atualizarObjetivos();
            }
        }
    }

    private void atualizarObjetivos() {
        this.modelObjetivos = this.objetivoCertificacaoBean.buscarTodosObjetivos();
    }

    //====================
    //Table Actions
    //====================
    //====================
    //SelectItem
    //====================
    public List<SelectItem> getCertificacoes() {
        return this.selectItemManager.getCertificacoes();
    }
    //=========================
    //Getters AND Setters
    //=========================

    public ObjetivoCertificacao getObjetivoCertificacao() {
        return objetivoCertificacao;
    }

    public void setObjetivoCertificacao(ObjetivoCertificacao objetivoCertificacao) {
        this.objetivoCertificacao = objetivoCertificacao;
    }

    public List<ObjetivoCertificacao> getModelObjetivos() {
        if (this.modelObjetivos == null) {
            atualizarObjetivos();
        }
        return modelObjetivos;
    }

    public void setModelObjetivos(List<ObjetivoCertificacao> modelObjetivos) {
        this.modelObjetivos = modelObjetivos;
    }

    public SelectItemManager getSelectItemManager() {
        return selectItemManager;
    }

    public void setSelectItemManager(SelectItemManager selectItemManager) {
        this.selectItemManager = selectItemManager;
    }
}
